package com.example.alphabetindexer.widget;

import java.util.ArrayList;
import java.util.List;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.alphabetindexer.R;

/**
 * 字母导航需要用到的adapter基类
 * 
 * @author atearsan/2013年8月4日
 * 
 */
public class AlphabetIndexerAdapter extends BaseAdapter {
	/** 字母表分组工具 */
	private AlphabetSectionIndexer mIndexer;
	protected List<AlphabetIndexerBean> beanList = new ArrayList<AlphabetIndexerBean>();

	public List<AlphabetIndexerBean> getBeanList() {
		return beanList;
	}

	/**
	 * beanList必须是排序好的.<br>
	 * 排序使用: Collections.sort(beanFilterList, new AlphabetIndexerComparator());
	 * @param beanList
	 */
	public void setBeanList(List<AlphabetIndexerBean> beanList) {
		this.beanList = beanList;
	}

	public AlphabetSectionIndexer getIndexer() {
		return mIndexer;
	}

	public void setIndexer(AlphabetSectionIndexer indexer) {
		this.mIndexer = indexer;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		/*
		 * ...
		 * code
		 * ...
		 * 
		 * setItemTitle(convertView, position);
		 */
		return null;
	}
	
	@Override
	public void notifyDataSetChanged() {
		// 通知Indexer, List已经改变
		mIndexer.notifyBeanListChanged(beanList);
		super.notifyDataSetChanged();
	}

	/** 分类的title(A-Z) */
	private TextView tvSection;
	/**
	 * 设置title显示的文字和是否隐藏<br>
	 * 
	 * 子类要在 {@link #getView(int, View, ViewGroup)}中调用这个方法
	 * @param view
	 * @param position
	 */
	protected void setItemTitle(View view, int position, int sectionId) {
		tvSection = (TextView) view.findViewById(sectionId);

		/*
		 * 通过当前的position值拿到了对应的section值，然后再反向通过刚刚拿到的section值，
		 * 调用getPositionForSection方法，取回新的position值；
		 * 如果当前的position值和新的position值是相等的，那么我们就可以认为当前position的项是某个分组下的第一个元素，
		 * 我们应该将分组布局显示出来，而其它的情况就应该将分组布局隐藏。
		 */
		int section = mIndexer.getSectionForPosition(position);
		if (position == mIndexer.getPositionForSection(section)) {
			tvSection.setText(beanList.get(position).getSortKey().charAt(0)+""); // StringTools.EMPTY
			tvSection.setVisibility(View.VISIBLE);
		} else {
			tvSection.setVisibility(View.GONE);
		}
	}

	@Override
	public int getCount() {
		return beanList.size();
	}

	@Override
	public Object getItem(int position) {
		return beanList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}
}
